function curryingadd() {
  let args = Array.from(arguments);
  let innerAdd = function () {
    let argsinner = Array.from(arguments);
    // 如果此时内部没有参数了也就是 f() 就直接返回值即可
    if (argsinner.length == 0) {
      return args.reduce((prev, cur) => {
        return prev + cur;
      });
    } else {
      // 这里使用了闭包 因为args是外部定义的 所以递归时可以累计存储变量
      args.push(...arguments);
      return innerAdd;
    }
  };
  innerAdd.toString = function () {
    return args.reduce((prev, curr) => {
      return prev + curr;
    }, 0);
  };
  return innerAdd;
}

// let res = // 133
let res = curryingadd(2)(1, 3, 4)(2, 3)(3)(4, 6)(7, 98);
console.log(parseInt(res)); // 133

console.log(curryingadd(2)(1, 3, 4)(2, 3)(3)(4, 6)(7, 98).toString()); // 133
console.log(curryingadd(2)(1, 3, 4)(2, 3)(3)(4, 6)(7, 98)()); //133
